package org.plex.core;

import java.util.List;
import java.util.Set;

import org.plex.model.Role;

import com.adobe.idp.um.api.UMException;

public interface RoleManager
{

	/**
	 * 判断用户是否有相应的角色
	 * 
	 * @param roleID
	 * @param principalOid
	 * @return
	 * @throws UMException
	 */
	boolean isUserInRole(String roleID, String principalOid) throws UMException;

	/**
	 * 创建一个角色
	 * 
	 * @param role
	 * @throws UMException
	 */
	void createRole(org.plex.model.Role role) throws UMException;

	/***
	 * 创建一个角色，并为角色设置相应的用户
	 * 
	 * @param role
	 * @param addPermissionOids
	 * @throws UMException
	 */
	void createRole(org.plex.model.Role role, List<String> addPermissionOids)
			throws UMException;

	/**
	 * 删除一个角色
	 * 
	 * @param roleID
	 * @throws UMException
	 */
	void deleteRole(String roleID) throws UMException;

	/**
	 * 为用户分配角色
	 * 
	 * @param roleId
	 * @param principalOids
	 * @throws UMException
	 */
	void assignRole(String roleId, List<String> principalOids)
			throws UMException;

	void assignRoles(List<String> roleId,List<String>principalOids)throws UMException;
	/***
	 * 删除用户角色
	 * 
	 * @param roleId
	 * @param userOid
	 * @throws UMException
	 */
	void unassignRole(String roleId, List<String> userOid) throws UMException;

	/**
	 * 从多个用户中删除多个多个角色
	 * @param roleList
	 * @param userOidList
	 * @throws UMException
	 */
	void unassignRoles(List<String> roleList,List<String> userOidList) throws UMException;
	/**
	 * 根据用户ID查找用户
	 * 
	 * @param roleId
	 * @return
	 * @throws UMException
	 * @throws NullPointerException
	 */
	org.plex.model.Role findRole(String roleId) throws NullPointerException,
			UMException;

	/**
	 * 根据查询条件查找用户
	 * 
	 * @param filter
	 * @return
	 */
	List<Role> findRoles(org.plex.searchfilter.imp.RoleSearchFilter filter);

	/***
	 * 获取所有的权限列表
	 * 
	 * @return
	 */
	List<Role> allRoles();

	/**
	 * 获取用户角色集
	 * 
	 * @param principalOid
	 * @return
	 * @throws UMException
	 */
	Set<Role> findRolesForPrincipal(String principalOid) throws UMException;
	
	
}
